home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / GameState.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-11-16  |  55.5 KB  |  1,240 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import Bladex
  5. import BBLib
  6. import time
  7. import types
  8. import cPickle
  9. import os
  10. import shutil
  11. import string
  12. import GameStateAux
  13. import ObjStore
  14. import Language
  15. NotSave = []
  16. ModulesToBeSaved = []
  17.  
  18. def GetPickFileName(data):
  19.     filename = None
  20.     
  21.     try:
  22.         filename = '%s/%s.dat' % ('f', data.persistent_id())
  23.     except:
  24.         if type(data) in (types.DictionaryType, types.ListType, types.TupleType):
  25.             filename = '%s/%s%s.dat' % ('f', str(type(data)), ObjStore.GetNewId())
  26.         elif type(data) == types.FunctionType:
  27.             filename = '%s/%s%s.dat' % ('f', data.func_name, ObjStore.GetNewId())
  28.         elif type(data) == types.MethodType:
  29.             filename = '%s/%s%s.dat' % ('f', data.im_func.func_name, ObjStore.GetNewId())
  30.         else:
  31.             filename = '%s/%s%s.dat' % ('f', str(type(data)), ObjStore.GetNewId())
  32.  
  33.     return filename
  34.  
  35.  
  36. def SavePickDataAux(file, aux_dir, data, assign):
  37.     if data:
  38.         filename = GetPickFileName(data)
  39.         restorestring = 'GameStateAux.GetPickledData("%s")' % (filename,)
  40.         file.write(assign % (restorestring,))
  41.         GameStateAux.SavePickData(filename, data)
  42.     
  43.  
  44.  
  45. def SavePickledObjects(file, aux_dir):
  46.     filename = '%s/%s.dat' % (aux_dir, 'DinObjs')
  47.     ObjStore.CheckStore()
  48.     funcfile = open(filename, 'wt')
  49.     p = cPickle.Pickler(funcfile)
  50.     p.dump(ObjStore.ObjectsStore)
  51.     funcfile.close()
  52.     file.write('GameStateAux.GetPickledObjects("%s")\n' % (filename,))
  53.  
  54.  
  55. class EntityState:
  56.     
  57.     def __init__(self, entity):
  58.         self.CreationProps = { }
  59.         self.SpecialProps = { }
  60.         self.CreationProps['Name'] = entity.Name
  61.         self.CreationProps['Kind'] = entity.Kind
  62.         self.CreationProps['Position'] = entity.Position
  63.         if entity.Data:
  64.             self.SpecialProps['Data'] = entity.Data
  65.         
  66.         if entity.FrameFunc:
  67.             self.SpecialProps['FrameFunc'] = entity.FrameFunc
  68.         
  69.         if entity.HitFunc:
  70.             self.SpecialProps['HitFunc'] = entity.HitFunc
  71.         
  72.         if entity.InflictHitFunc:
  73.             self.SpecialProps['InflictHitFunc'] = entity.InflictHitFunc
  74.         
  75.         if entity.DamageFunc:
  76.             self.SpecialProps['DamageFunc'] = entity.DamageFunc
  77.         
  78.         if entity.TimerFunc:
  79.             self.SpecialProps['TimerFunc'] = entity.TimerFunc
  80.         
  81.         if entity.HearFunc:
  82.             self.SpecialProps['HearFunc'] = entity.HearFunc
  83.         
  84.         if entity.UseFunc:
  85.             self.SpecialProps['UseFunc'] = entity.UseFunc
  86.         
  87.         if entity.SeeFunc:
  88.             self.SpecialProps['SeeFunc'] = entity.SeeFunc
  89.         
  90.         if entity.StickFunc:
  91.             self.SpecialProps['StickFunc'] = entity.StickFunc
  92.         
  93.         self.InWorld = entity.InWorld
  94.  
  95.     
  96.     def SaveCreation(self, file, aux_dir):
  97.         file.write('\n\n\n')
  98.         file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f)\n' % (self.CreationProps['Name'], self.CreationProps['Kind'], self.CreationProps['Position'][0], self.CreationProps['Position'][1], self.CreationProps['Position'][2]))
  99.  
  100.     
  101.     def SaveSpecialProperties(self, file, aux_dir):
  102.         name = self.CreationProps['Name']
  103.         for i in self.SpecialProps.keys():
  104.             curr_func = self.SpecialProps[i]
  105.             f_rest_string = 'o.%s=' % i
  106.             SavePickDataAux(file, aux_dir, curr_func, f_rest_string + '%s\n')
  107.         
  108.  
  109.     
  110.     def SaveStatePass2(self, file, aux_dir):
  111.         if self.SpecialProps.keys():
  112.             file.write('o=Bladex.GetEntity("%s")\n' % self.CreationProps['Name'])
  113.             self.SaveSpecialProperties(file, aux_dir)
  114.             file.write('\n\n')
  115.         
  116.  
  117.  
  118.  
  119. class EntitySpotState(EntityState):
  120.     
  121.     def __init__(self, entity):
  122.         EntityState.__init__(self, entity)
  123.  
  124.  
  125.  
  126. class EntityObjectState(EntityState):
  127.     
  128.     def __init__(self, entity):
  129.         EntityState.__init__(self, entity)
  130.  
  131.  
  132.  
  133. class EntityPhysicState(EntityObjectState):
  134.     
  135.     def __init__(self, entity):
  136.         EntityObjectState.__init__(self, entity)
  137.         if entity.OnStopFunc:
  138.             self.SpecialProps['OnStopFunc'] = entity.OnStopFunc
  139.         
  140.  
  141.  
  142.  
  143. class EntityWeaponState(EntityPhysicState):
  144.     
  145.     def __init__(self, entity):
  146.         EntityPhysicState.__init__(self, entity)
  147.         if entity.HitShieldFunc:
  148.             self.SpecialProps['HitShieldFunc'] = entity.HitShieldFunc
  149.         
  150.  
  151.  
  152.  
  153. class EntityActorState(EntityObjectState):
  154.     
  155.     def __init__(self, entity):
  156.         EntityObjectState.__init__(self, entity)
  157.  
  158.  
  159.  
  160. class EntityArrowState(EntityWeaponState):
  161.     
  162.     def __init__(self, entity):
  163.         EntityWeaponState.__init__(self, entity)
  164.  
  165.  
  166.  
  167. class EntityParticleSystemState(EntityState):
  168.     
  169.     def __init__(self, entity):
  170.         EntityState.__init__(self, entity)
  171.  
  172.  
  173.  
  174. class EntityFireState(EntityState):
  175.     
  176.     def __init__(self, entity):
  177.         EntityState.__init__(self, entity)
  178.  
  179.  
  180.  
  181. class EntityCameraState(EntityState):
  182.     
  183.     def __init__(self, entity):
  184.         EntityState.__init__(self, entity)
  185.  
  186.  
  187.  
  188. class EntityAuraState(EntityState):
  189.     
  190.     def __init__(self, entity):
  191.         EntityState.__init__(self, entity)
  192.  
  193.  
  194.  
  195. class EntitySlidingAreaState(EntityState):
  196.     
  197.     def __init__(self, entity):
  198.         EntityState.__init__(self, entity)
  199.         self.Displacement = entity.Displacement
  200.         self.SpecialProps['OnStopFunc'] = entity.OnStopFunc
  201.         self.Limit = entity.DisplacementLimit
  202.         self.V_D = entity.V_D
  203.         self.A_D = entity.A_D
  204.         self.IsStopped = entity.IsStopped
  205.  
  206.     
  207.     def SaveProperties(self, file, aux_dir):
  208.         EntityState.SaveProperties(self, file, aux_dir)
  209.         file.write('o.Displacement=%s\n' % str(self.Displacement))
  210.  
  211.     
  212.     def SaveSpecialProperties(self, file, aux_dir):
  213.         EntityState.SaveSpecialProperties(self, file, aux_dir)
  214.         SavePickDataAux(file, aux_dir, self.SpecialProps['OnStopFunc'], 'o.OnStopFunc=%s\n')
  215.  
  216.  
  217.  
  218. class EntityWaterState(EntityState):
  219.     
  220.     def __init__(self, entity):
  221.         EntityState.__init__(self, entity)
  222.         if entity.TouchFluidFunc:
  223.             self.SpecialProps['TouchFluidFunc'] = entity.TouchFluidFunc
  224.         
  225.  
  226.  
  227.  
  228. class EntitySoundState(EntityState):
  229.     
  230.     def __init__(self, entity):
  231.         EntityState.__init__(self, entity)
  232.  
  233.  
  234.  
  235. class EntityMagicMissileState(EntityState):
  236.     
  237.     def __init__(self, entity):
  238.         EntityState.__init__(self, entity)
  239.  
  240.  
  241.  
  242. class EntityElectricBoltState(EntityState):
  243.     
  244.     def __init__(self, entity):
  245.         EntityState.__init__(self, entity)
  246.  
  247.  
  248.  
  249. class EntityPoolState(EntityState):
  250.     
  251.     def __init__(self, entity):
  252.         EntityState.__init__(self, entity)
  253.  
  254.  
  255.  
  256. class EntityParticleState(EntityState):
  257.     
  258.     def __init__(self, entity):
  259.         EntityState.__init__(self, entity)
  260.  
  261.  
  262.  
  263. class EntityDecalState(EntityState):
  264.     
  265.     def __init__(self, entity):
  266.         EntityState.__init__(self, entity)
  267.  
  268.  
  269.  
  270. class EntityLavaState(EntityState):
  271.     
  272.     def __init__(self, entity):
  273.         EntityState.__init__(self, entity)
  274.         if entity.TouchFluidFunc:
  275.             self.SpecialProps['TouchFluidFunc'] = entity.TouchFluidFunc
  276.         
  277.  
  278.  
  279.  
  280. class EntityBipedState(EntityState):
  281.     
  282.     def __init__(self, entity):
  283.         EntityState.__init__(self, entity)
  284.  
  285.  
  286.  
  287. class EntityPersonState(EntityBipedState):
  288.     
  289.     def __init__(self, entity):
  290.         EntityBipedState.__init__(self, entity)
  291.         self.SpecialProps['EnterPrimaryAAFunc'] = entity.EnterPrimaryAAFunc
  292.         self.SpecialProps['EnterSecondaryAAFunc'] = entity.EnterSecondaryAAFunc
  293.         self.SpecialProps['EnterCloseFunc'] = entity.EnterCloseFunc
  294.         self.SpecialProps['EnterLargeFunc'] = entity.EnterLargeFunc
  295.         self.SpecialProps['AnmEndedFunc'] = entity.AnmEndedFunc
  296.         self.SpecialProps['DelayNoSeenFunc'] = entity.DelayNoSeenFunc
  297.         self.SpecialProps['RouteEndedFunc'] = entity.RouteEndedFunc
  298.         self.SpecialProps['ImHurtFunc'] = entity.ImHurtFunc
  299.         self.SpecialProps['ImDeadFunc'] = entity.ImDeadFunc
  300.         self.SpecialProps['EnemyDeadFunc'] = entity.EnemyDeadFunc
  301.         self.SpecialProps['NoAllowedAreaFunc'] = entity.NoAllowedAreaFunc
  302.         self.SpecialProps['EnemyNoAllowedAreaFunc'] = entity.EnemyNoAllowedAreaFunc
  303.         self.SpecialProps['CharSeeingEnemyFunc'] = entity.CharSeeingEnemyFunc
  304.         self.SpecialProps['AnmTranFunc'] = entity.AnmTranFunc
  305.         self.SpecialProps['TakeFunc'] = entity.TakeFunc
  306.         self.SpecialProps['ThrowFunc'] = entity.ThrowFunc
  307.         self.SpecialProps['MutilateFunc'] = entity.MutilateFunc
  308.         self.SpecialProps['CombatDistFlag'] = entity.CombatDistFlag
  309.         self.InitInventory(entity)
  310.  
  311.     
  312.     def SaveSpecialProperties(self, file, aux_dir):
  313.         pass
  314.  
  315.     
  316.     def InitInventory(self, entity):
  317.         import Actions
  318.         inv = entity.GetInventory()
  319.         self.Inventory = { }
  320.         self.Inventory['Objects'] = []
  321.         for i in range(inv.nKindObjects):
  322.             for name in Actions.GetListOfObjectsAt(inv, i):
  323.                 self.Inventory['Objects'].append(name)
  324.             
  325.         
  326.         self.Inventory['Weapons'] = []
  327.         for i in range(inv.nWeapons):
  328.             self.Inventory['Weapons'].append(inv.GetWeapon(i))
  329.         
  330.         self.Inventory['Shields'] = []
  331.         for i in range(inv.nShields):
  332.             self.Inventory['Shields'].append(inv.GetShield(i))
  333.         
  334.         self.Inventory['Quivers'] = []
  335.         for i in range(inv.nQuivers):
  336.             self.Inventory['Quivers'].append(inv.GetQuiver(i))
  337.         
  338.         self.Inventory['Keys'] = []
  339.         for i in range(inv.nKeys):
  340.             self.Inventory['Keys'].append(inv.GetKey(i))
  341.         
  342.         self.Inventory['SpecialKeys'] = []
  343.         for i in range(inv.nSpecialKeys):
  344.             self.Inventory['SpecialKeys'].append(inv.GetSpecialKey(i))
  345.         
  346.         self.Inventory['Tablets'] = []
  347.         for i in range(inv.nTablets):
  348.             self.Inventory['Tablets'].append(inv.GetTablet(i))
  349.         
  350.         self.Inventory['InvLeft'] = entity.InvLeft
  351.         self.Inventory['InvLeft2'] = entity.InvLeft2
  352.         self.Inventory['InvRight'] = entity.InvRight
  353.         self.Inventory['InvLeftBack'] = entity.InvLeftBack
  354.         self.Inventory['InvRightBack'] = entity.InvRightBack
  355.  
  356.     
  357.     def SaveStatePass2(self, file, aux_dir):
  358.         file.write('\no=Bladex.GetEntity("%s")\n' % self.CreationProps['Name'])
  359.         if self.SpecialProps.has_key('Data'):
  360.             data = self.SpecialProps['Data']
  361.             SavePickDataAux(file, aux_dir, data, 'o.Data=%s\n')
  362.         
  363.         file.write('inv=o.GetInventory()\n')
  364.         for i in self.Inventory['Objects']:
  365.             file.write('Actions.ExtendedTakeObject(inv,"%s")\n' % (i,))
  366.         
  367.         for i in self.Inventory['Weapons']:
  368.             file.write('GameStateAux.AddWeaponToInventory(inv,"%s")\n' % (i,))
  369.         
  370.         for i in self.Inventory['Shields']:
  371.             file.write('inv.AddShield("%s")\n' % (i,))
  372.             real_ent = Bladex.GetEntity(i)
  373.             
  374.             try:
  375.                 a = real_ent.Data.brkobjdata
  376.                 file.write('Breakings.SetBreakableWS("%s")\n' % (i,))
  377.             except Exception:
  378.                 0
  379.                 exc = 0
  380.                 self.Inventory['Shields']
  381.                 print 'Exception in SaveStatePass2', exc
  382.             except:
  383.                 self.Inventory['Weapons']
  384.  
  385.         
  386.         for i in self.Inventory['Quivers']:
  387.             file.write('GameStateAux.AddQuiverToInventory(inv,"%s")\n' % (i,))
  388.         
  389.         for i in self.Inventory['Keys']:
  390.             file.write('inv.AddKey("%s")\n' % (i,))
  391.         
  392.         for i in self.Inventory['SpecialKeys']:
  393.             file.write('inv.AddSpecialKey("%s")\n' % (i,))
  394.         
  395.         for i in self.Inventory['Tablets']:
  396.             file.write('inv.AddTablet("%s")\n' % (i,))
  397.         
  398.  
  399.  
  400. v__entities_saved = 0
  401.  
  402. class EntitiesStateAux:
  403.     
  404.     def __init__(self, EntClass):
  405.         self.EntClass = EntClass
  406.         self.Entities = []
  407.  
  408.     
  409.     def AddEntityState(self, entity):
  410.         self.Entities.append(self.EntClass(entity))
  411.  
  412.     
  413.     def SaveStates(self, file, aux_dir):
  414.         file.write('# There are %d entities\n\n' % (len(self.Entities),))
  415.         for i in self.Entities:
  416.             i.SaveState(file, aux_dir)
  417.         
  418.  
  419.     
  420.     def SaveStatesPass2(self, file, aux_dir):
  421.         global v__entities_saved
  422.         for i in self.Entities:
  423.             v__entities_saved = v__entities_saved + 1
  424.             i.SaveStatePass2(file, aux_dir)
  425.         
  426.  
  427.     
  428.     def DestroyEntities(self):
  429.         for i in self.Entities:
  430.             pass
  431.         
  432.         self.Entities = []
  433.  
  434.  
  435.  
  436. class EntitiesState:
  437.     
  438.     def __init__(self):
  439.         self.State = { }
  440.         self.State['Entity Object'] = EntitiesStateAux(EntityObjectState)
  441.         self.State['Entity PhysicObject'] = EntitiesStateAux(EntityPhysicState)
  442.         self.State['Entity Weapon'] = EntitiesStateAux(EntityWeaponState)
  443.         self.State['Entity Arrow'] = EntitiesStateAux(EntityArrowState)
  444.         self.State['Entity Actor'] = EntitiesStateAux(EntityActorState)
  445.         self.State['Entity Biped'] = EntitiesStateAux(EntityBipedState)
  446.         self.State['Entity Person'] = EntitiesStateAux(EntityPersonState)
  447.         self.State['Entity Spot'] = EntitiesStateAux(EntitySpotState)
  448.         self.State['Entity PrtclSys'] = EntitiesStateAux(EntityParticleSystemState)
  449.         self.State['Entity Particle System D1'] = EntitiesStateAux(EntityParticleSystemState)
  450.         self.State['Entity Particle System D2'] = EntitiesStateAux(EntityParticleSystemState)
  451.         self.State['Entity Particle System D3'] = EntitiesStateAux(EntityParticleSystemState)
  452.         self.State['Entity Particle System Dobj'] = EntitiesStateAux(EntityParticleSystemState)
  453.         self.State['Entity Particle System Dperson'] = EntitiesStateAux(EntityParticleSystemState)
  454.         self.State['Entity Fire'] = EntitiesStateAux(EntityFireState)
  455.         self.State['Entity Camera'] = EntitiesStateAux(EntityCameraState)
  456.         self.State['Entity Water'] = EntitiesStateAux(EntityWaterState)
  457.         self.State['Entity Sound'] = EntitiesStateAux(EntitySoundState)
  458.         self.State['Entity Magic Missile'] = EntitiesStateAux(EntityMagicMissileState)
  459.         self.State['Entity ElectricBolt'] = EntitiesStateAux(EntityElectricBoltState)
  460.         self.State['Entity Pool'] = EntitiesStateAux(EntityPoolState)
  461.         self.State['Entity Particle'] = EntitiesStateAux(EntityParticleState)
  462.         self.State['Entity Decal'] = EntitiesStateAux(EntityDecalState)
  463.         self.State['Entity Lava'] = EntitiesStateAux(EntityLavaState)
  464.         self.State['Entity Sliding Area'] = EntitiesStateAux(EntitySlidingAreaState)
  465.         self.State['Entity Aura'] = EntitiesStateAux(EntityAuraState)
  466.  
  467.     
  468.     def GetState(self):
  469.         for i in range(Bladex.nEntities()):
  470.             entity = Bladex.GetEntity(i)
  471.             kind = entity.Kind
  472.             state = None
  473.             if kind in self.State.keys():
  474.                 self.State[kind].AddEntityState(entity)
  475.             elif entity.Object:
  476.                 self.State['Entity Object'].AddEntityState(entity)
  477.             elif entity.Person:
  478.                 self.State['Entity Person'].AddEntityState(entity)
  479.             elif entity.Weapon:
  480.                 self.State['Entity Weapon'].AddEntityState(entity)
  481.             elif entity.Arrow:
  482.                 self.State['Entity Arrow'].AddEntityState(entity)
  483.             elif entity.Physic:
  484.                 self.State['Entity PhysicObject'].AddEntityState(entity)
  485.             
  486.         
  487.  
  488.     
  489.     def SaveStatePass2(self, file, aux_dir):
  490.         for i in self.State.keys():
  491.             file.write('\n\n')
  492.         
  493.  
  494.     
  495.     def DestroyEntities(self):
  496.         for i in self.State.keys():
  497.             pass
  498.         
  499.  
  500.  
  501.  
  502. def CreateEntAux(obj_tuple, obj_kind):
  503.     obj = Bladex.GetEntity(obj_tuple[0])
  504.     if not obj:
  505.         BBLib.ReadBOD(obj_tuple[2])
  506.         obj = Bladex.CreateEntity(obj_tuple[0], obj_tuple[1], 0, 0, 0, obj_kind)
  507.     
  508.     return obj
  509.  
  510.  
  511. class SectorState:
  512.     
  513.     def __init__(self):
  514.         self.Index = -1
  515.         self.OnEnter = None
  516.         self.OnLeave = None
  517.         self.OnHit = None
  518.         self.OnWalkOn = None
  519.         self.OnWalkOut = None
  520.         self.Active = None
  521.         self.ActiveSurface = None
  522.         self.Save = 0
  523.         self.BreakInfo = None
  524.  
  525.     
  526.     def GetState(self, idx):
  527.         import Sparks
  528.         s = Bladex.GetSector(idx)
  529.         if s:
  530.             self.Index = s.Index
  531.             self.OnEnter = s.OnEnter
  532.             self.OnLeave = s.OnLeave
  533.             self.OnWalkOn = s.OnWalkOn
  534.             self.OnWalkOut = s.OnWalkOut
  535.             self.Active = s.Active
  536.             self.ActiveSurface = s.ActiveSurface
  537.             self.BreakInfo = s.BreakInfo
  538.             if Sparks.GenericSectorOnHit != s.OnHit and s.OnHit != None:
  539.                 self.OnHit = s.OnHit
  540.             
  541.             if s.Active != 1 and s.BreakInfo and s.OnEnter and s.OnLeave and s.OnWalkOn and s.OnWalkOut or self.OnHit:
  542.                 self.Save = 1
  543.             
  544.         
  545.  
  546.     
  547.     def SaveState(self, file, aux_dir):
  548.         import Sparks
  549.         if self.Save:
  550.             file.write('s=Bladex.GetSector(%d)\n' % self.Index)
  551.             self._SectorState__SaveCallbackFunction(file, 'OnEnter', aux_dir, self.OnEnter)
  552.             self._SectorState__SaveCallbackFunction(file, 'OnLeave', aux_dir, self.OnLeave)
  553.             self._SectorState__SaveCallbackFunction(file, 'OnHit', aux_dir, self.OnHit)
  554.             self._SectorState__SaveCallbackFunction(file, 'OnWalkOn', aux_dir, self.OnWalkOn)
  555.             self._SectorState__SaveCallbackFunction(file, 'OnWalkOut', aux_dir, self.OnWalkOut)
  556.             file.write('s.Active=%d\n' % self.Active)
  557.             if self.BreakInfo:
  558.                 file.write('s.BreakInfo=%s\n' % str(self.BreakInfo))
  559.             
  560.             file.write('\n\n')
  561.         
  562.  
  563.     
  564.     def __SaveCallbackFunction(self, file, cbname, aux_dir, function):
  565.         r_cb_str = 's.%s=' % (cbname,)
  566.         SavePickDataAux(file, aux_dir, function, r_cb_str + '%s\n')
  567.  
  568.  
  569.  
  570. class MapState:
  571.     
  572.     def __init__(self):
  573.         self.SectorsState = []
  574.  
  575.     
  576.     def GetState(self):
  577.         nSectors = Bladex.nSectors()
  578.         for i in range(nSectors):
  579.             s = SectorState()
  580.             s.GetState(i)
  581.         
  582.  
  583.     
  584.     def SaveState(self, file, aux_dir):
  585.         for i in self.SectorsState:
  586.             i.SaveState(file, aux_dir)
  587.         
  588.  
  589.  
  590.  
  591. class TriggerSectorState:
  592.     
  593.     def __init__(self):
  594.         self.Index = -1
  595.         self.OnEnter = None
  596.         self.OnLeave = None
  597.         self.Data = None
  598.         self.Name = None
  599.         self.Grupo = None
  600.         self.Points = []
  601.         self.FloorHeight = 0
  602.         self.RoofHeight = 0
  603.  
  604.     
  605.     def GetState(self, idx):
  606.         self.Name = Bladex.GetTriggerSectorName(idx)
  607.         self.Index = idx
  608.         self.OnEnter = Bladex.GetTriggerSectorFunc(self.Name, 'OnEnter')
  609.         self.OnLeave = Bladex.GetTriggerSectorFunc(self.Name, 'OnLeave')
  610.         self.Data = Bladex.GetTriggerSectorData(self.Name)
  611.         self.Grupo = Bladex.GetTriggerSectorGroup(self.Name)
  612.         self.Points = Bladex.GetTriggerSectorPoints(self.Name)
  613.         self.FloorHeight = Bladex.GetTriggerSectorFloorHeight(self.Name)
  614.         self.RoofHeight = Bladex.GetTriggerSectorRoofHeight(self.Name)
  615.  
  616.     
  617.     def SaveState(self, file, aux_dir):
  618.         file.write('Bladex.AddTriggerSector("%s","%s",%f,%f,%s)\n' % (self.Name, self.Grupo, self.FloorHeight, self.RoofHeight, self.Points))
  619.         SavePickDataAux(file, aux_dir, self.OnEnter, 'Bladex.SetTriggerSectorFunc("' + self.Name + '","OnEnter",%s)\n')
  620.         SavePickDataAux(file, aux_dir, self.OnLeave, 'Bladex.SetTriggerSectorFunc("' + self.Name + '","OnLeave",%s)\n')
  621.         SavePickDataAux(file, aux_dir, self.Data, 'Bladex.SetTriggerSectorData("' + self.Name + '",%s)\n')
  622.         file.write('\n\n')
  623.  
  624.  
  625.  
  626. class TriggersState:
  627.     
  628.     def __init__(self):
  629.         self.SectorsState = []
  630.  
  631.     
  632.     def GetState(self):
  633.         nSectors = Bladex.nTriggerSectors()
  634.         for i in range(nSectors):
  635.             s = TriggerSectorState()
  636.             s.GetState(i)
  637.             self.SectorsState.append(s)
  638.         
  639.  
  640.     
  641.     def SaveState(self, file, aux_dir):
  642.         for i in self.SectorsState:
  643.             i.SaveState(file, aux_dir)
  644.         
  645.  
  646.  
  647.  
  648. class WorldState:
  649.     
  650.     def __init__(self):
  651.         self.EntitiesState = EntitiesState()
  652.         self.MapState = MapState()
  653.         self.TriggersState = TriggersState()
  654.  
  655.     
  656.     def GetState(self):
  657.         self.EntitiesState.GetState()
  658.         self.MapState.GetState()
  659.  
  660.     
  661.     def SaveState(self, filename):
  662.         import os
  663.         aux_dir = os.path.splitext(filename)[0] + '_files'
  664.         if os.path.exists(aux_dir):
  665.             shutil.rmtree(aux_dir)
  666.         
  667.         
  668.         try:
  669.             os.mkdir(aux_dir)
  670.         except:
  671.             pass
  672.  
  673.         import LoadBar
  674.         load_bar = LoadBar.AutoProgressBar(26, 'Saving ', '../../Data/Menu/Save/' + Language.Current + '/Guardando.jpg')
  675.         load_bar.Increment('AutoBODs')
  676.         self.SaveAutoBODs(aux_dir)
  677.         file_data_aux = open('%s/%saux' % (aux_dir, 'aux'), 'wt')
  678.         file_data_aux.write(Bladex.GetCurrentMap())
  679.         file_data_aux.close()
  680.         file = open(filename, 'wt')
  681.         file.write('############################################################\n')
  682.         file.write('#   Blade Game State %s\n' % (filename,))
  683.         file.write('#   Do not modify\n')
  684.         file.write('#   File created %s \n' % (time.asctime(time.gmtime(time.time())),))
  685.         file.write('############################################################\n\n\n\n')
  686.         file.write('import Bladex\n')
  687.         file.write('Bladex.SetTime(%f)\n' % (Bladex.GetTime(),))
  688.         file.write('import BBLib\n')
  689.         file.write('import cPickle\n')
  690.         file.write('import GameStateAux\n')
  691.         file.write('import Reference\n')
  692.         file.write('import Breakings\n')
  693.         file.write('import Sounds\n')
  694.         file.write('import Actions\n')
  695.         file.write('import os\n')
  696.         file.write('import sys\n')
  697.         file.write('import darfuncs\n\n\n\n')
  698.         file.write('import LoadBar\n\n\n\n')
  699.         file.write('############################################################\n')
  700.         file.write('#\n\n\n')
  701.         file.write('Bladex.KillMusic()\n')
  702.         file.write('Bladex.ShutDownSoundChannels()\n')
  703.         file.write('Bladex.PauseSoundSystem()\n')
  704.         file.write('Bladex.BeginLoadGame()\n')
  705.         file.write('__load_bar=LoadBar.AutoProgressBar(%d,"Loading ","%s")\n' % (Bladex.nEntities() / 5, '../../Data/Menu/Save/' + Language.Current + '/Cargando.jpg'))
  706.         file.write('GameStateAux.aux_dir="%s"\n' % (aux_dir,))
  707.         file.write('InNewMap=0\n')
  708.         file.write('if Bladex.GetCurrentMap()!="%s":\n' % (Bladex.GetCurrentMap(),))
  709.         file.write('  InNewMap=1\n')
  710.         file.write('print "InNewMap",InNewMap\n')
  711.         file.write('Bladex.SetCurrentMap("%s")\n' % (Bladex.GetCurrentMap(),))
  712.         file.write('sys.path.insert(0,os.getcwd())\n')
  713.         file.write('Bladex.SetSaveInfo(%s)\n' % str(Bladex.GetSaveInfo()))
  714.         load_bar.Increment('MMPs')
  715.         ResFiles = self.GetMMPFiles()
  716.         file.write('__load_bar.Increment("MMPs")\n')
  717.         file.write('GameStateAux.LoadMMPs(%s)\n' % (str(ResFiles),))
  718.         file.write('__load_bar.Increment()\n')
  719.         load_bar.Increment('BMPs')
  720.         ResFiles = self.GetBMPFiles()
  721.         file.write('__load_bar.Increment("BMPs")\n')
  722.         self.SaveList('GameStateAux.LoadBMPs(%s)\n', ResFiles, file)
  723.         file.write('__load_bar.Increment()\n')
  724.         load_bar.Increment('AlphaBMPs')
  725.         ResFiles = self.GetAlphaBMPFiles()
  726.         file.write('__load_bar.Increment("AlphaBMPs")\n')
  727.         self.SaveList('GameStateAux.LoadAlphaBMPs(%s)\n', ResFiles, file)
  728.         file.write('__load_bar.Increment()\n')
  729.         load_bar.Increment('Sounds')
  730.         file.write('__load_bar.Increment("Sounds")\n')
  731.         file.write('if InNewMap:\n')
  732.         file.write('  Bladex.LoadSoundDataBase("%s/Sounds.sdb")\n' % (aux_dir,))
  733.         Bladex.SaveSoundDataBase('%s/Sounds.sdb' % (aux_dir,))
  734.         file.write('__load_bar.Increment("AutoBODs")\n')
  735.         file.write('BBLib.LoadAutoBODData("%s/AutoBOD.dat")\n\n\n' % (aux_dir,))
  736.         load_bar.Increment('BODInspector')
  737.         file.write('Bladex.BodInspector()\n')
  738.         psys_data_file = aux_dir + '/psys_data.dat'
  739.         load_bar.Increment('ParticleSystem')
  740.         Bladex.SaveParticleSystemsData(psys_data_file)
  741.         file.write('__load_bar.Increment("Particle Systems")\n')
  742.         file.write('Bladex.LoadParticleSystemsData("%s")\n' % (psys_data_file,))
  743.         file.write('__load_bar.Increment("ObjStore")\n')
  744.         self.SaveTimers(file)
  745.         file.write('if InNewMap:\n')
  746.         file.write('  Bladex.LoadWorld("%s")\n' % (Bladex.GetWorldFileName(),))
  747.         file.write('__load_bar.Increment()\n')
  748.         file.write('import ObjStore\n')
  749.         file.write('ObjStore.StoreIndex=%d\n' % (ObjStore.StoreIndex,))
  750.         file.write('import BODInit\n')
  751.         file.write('BODInit.Init()\n\n')
  752.         file.write('__load_bar.Increment()\n')
  753.         file.write('import PickInit\n')
  754.         file.write('PickInit.Init()\n\n')
  755.         file.write('__load_bar.Increment("Pick")\n')
  756.         file.write('if InNewMap:\n')
  757.         file.write('  __load_bar.Increment("SolidMask")\n')
  758.         file.write('  import SolidMask\n')
  759.         file.write('  SolidMask.Init()\n')
  760.         file.write('  __load_bar.Increment("Material")\n')
  761.         file.write('  import Material\n')
  762.         file.write('  Material.Init()\n')
  763.         file.write('__load_bar.Increment("AniSound")\n')
  764.         file.write('import AniSound\n')
  765.         file.write('__load_bar.Increment("anm_def")\n')
  766.         file.write('import anm_def\n')
  767.         file.write('anm_def.Init()\n')
  768.         file.write('__load_bar.Increment("StepSounds")\n')
  769.         file.write('import StepSounds\n')
  770.         file.write('StepSounds.Init()\n')
  771.         file.write('__load_bar.Increment("Enemies")\n')
  772.         file.write('import Enemies\n')
  773.         file.write('Enemies.Init()\n')
  774.         file.write('__load_bar.Increment("Biped")\n')
  775.         file.write('import Biped\n')
  776.         file.write('Biped.Init()\n')
  777.         file.write('__load_bar.Increment("anm_conv")\n')
  778.         file.write('import anm_conv\n')
  779.         file.write('anm_conv.Init()\n')
  780.         file.write('__load_bar.Increment("Anm_Mdf")\n')
  781.         file.write('import Anm_Mdf\n')
  782.         file.write('Anm_Mdf.Init()\n')
  783.         file.write('execfile("../../Scripts/AutoGenTextures.py")\n')
  784.         file.write('__load_bar.Increment()\n')
  785.         file.write('try:\n')
  786.         file.write('  execfile("ActorsInit.py")\n')
  787.         file.write('except IOError:\n')
  788.         file.write('  print "Can\xd5\xb4 find ActorsInit.py"\n\n\n')
  789.         combustion_data_file = aux_dir + '/combustion_data.dat'
  790.         load_bar.Increment('Combustion Data')
  791.         Bladex.SaveCombustionData(combustion_data_file)
  792.         file.write('print "About to load Combustion data"\n')
  793.         file.write('if InNewMap:\n')
  794.         file.write('  Bladex.LoadCombustionData("%s")\n' % (combustion_data_file,))
  795.         file.write('else:\n')
  796.         file.write('  Bladex.ReassignCombustionData()\n')
  797.         file.write('__load_bar.Increment()\n')
  798.         ent_data_file = aux_dir + '/ent_data.dat'
  799.         load_bar.Increment('Entities Data')
  800.         Bladex.SaveEntitiesData(ent_data_file)
  801.         file.write('__load_bar.Increment("Entities")\n')
  802.         file.write('Bladex.LoadEntitiesData("%s")\n' % (ent_data_file,))
  803.         file.write('__load_bar.Increment()\n')
  804.         import os
  805.         import sys
  806.         file.write('import sys\n')
  807.         file.write('import os\n')
  808.         str_path = os.getcwd()
  809.         adj_str_path = string.replace(str_path, '\\\\', '/')
  810.         adj_str_path = string.replace(adj_str_path, '\\', '/')
  811.         file.write('sys.path.append("%s")\n\n' % (adj_str_path,))
  812.         file.write('__load_bar.Increment("DefFuncs")\n')
  813.         file.write('try:\n')
  814.         file.write('  execfile("DefFuncs.py")\n')
  815.         file.write('except IOError:\n')
  816.         file.write('  print "Can\xb4t find DefFuncs.py"\n\n\n')
  817.         file.write('__load_bar.Increment()\n')
  818.         file.write('try:\n')
  819.         file.write('  char=Bladex.GetEntity("Player1")\n')
  820.         file.write('  execfile("MusicEvents.py")\n')
  821.         file.write('except IOError:\n')
  822.         file.write('  print "Can\xd5\xb4 find MusicEvents.py"\n\n\n')
  823.         file.write('__load_bar.Increment()\n')
  824.         file.write('__load_bar.Increment("MusDB")\n')
  825.         file.write('Bladex.LoadMusicState("%s/MusState.sdb")\n' % (aux_dir,))
  826.         load_bar.Increment('MusicState')
  827.         Bladex.SaveMusicState('%s/MusState.sdb' % (aux_dir,))
  828.         file.write('try:\n')
  829.         file.write('  execfile("TextureMaterials.py")\n')
  830.         file.write('except IOError:\n')
  831.         file.write('  print "Can\xd5\xb4 find TextureMaterials.py"\n\n\n')
  832.         file.write('__load_bar.Increment()\n')
  833.         file.write('\n')
  834.         file.write('GameStateAux.InitGameState("%s")\n\n' % (aux_dir,))
  835.         file.write('__load_bar.Increment()\n')
  836.         file.write('__load_bar.Increment("Modules")\n')
  837.         load_bar.Increment('Modules')
  838.         self.SaveModules(file)
  839.         file.write('__load_bar.Increment("Vars")\n')
  840.         load_bar.Increment('Variables')
  841.         self.SaveVars(file)
  842.         file.write('__load_bar.Increment("Sounds")\n')
  843.         load_bar.Increment('Sounds')
  844.         self.SaveSounds(file)
  845.         file.write('__load_bar.Increment("Sectors")\n')
  846.         load_bar.Increment('Sectors')
  847.         self.SaveSectors(file)
  848.         file.write('__load_bar.Increment("Entities")\n')
  849.         load_bar.Increment('Entities')
  850.         self.SaveEntities(file)
  851.         file.write('__load_bar.Increment("PickledObjects")\n')
  852.         load_bar.Increment('PickledObjects')
  853.         SavePickledObjects(file, aux_dir)
  854.         file.write('__load_bar.Increment("Python Objects")\n')
  855.         load_bar.Increment('Python Objects')
  856.         self.SaveObjects(file, aux_dir)
  857.         file.write('__load_bar.Increment("MapState")\n')
  858.         load_bar.Increment('Map State')
  859.         self.MapState.SaveState(file, aux_dir)
  860.         file.write('__load_bar.Increment("TriggerState")\n')
  861.         load_bar.Increment('Triggers State')
  862.         self.TriggersState.GetState()
  863.         self.TriggersState.SaveState(file, aux_dir)
  864.         file.write('__load_bar.Increment("State pass2")\n')
  865.         load_bar.Increment('Entities State pass 2')
  866.         self.EntitiesState.SaveStatePass2(file, aux_dir)
  867.         file.write('__load_bar.Increment()\n')
  868.         file.write('print "About set objects relations"\n')
  869.         file.write('__load_bar.Increment("Scheduled functions")\n')
  870.         load_bar.Increment('Comp Vars')
  871.         self.SaveCompVars(file, aux_dir)
  872.         file.write('__load_bar.Increment("Global comp vars")\n')
  873.         load_bar.Increment('Scheduled Functions')
  874.         self.SaveScheduledFuncs(file)
  875.         file.write('__load_bar.Increment("AfterFrame functions")\n')
  876.         load_bar.Increment('After Frame Functions')
  877.         self.SaveAfterFrameFuncs(file)
  878.         load_bar.Increment('Extra Data')
  879.         GameStateAux.SaveExtraDataAux(file, aux_dir)
  880.         load_bar.Increment('Extra Modules')
  881.         self.SaveModulesToBeSaved(file, aux_dir, ModulesToBeSaved)
  882.         load_bar.Increment('Cleaning up')
  883.         GameStateAux.EndGameState(aux_dir)
  884.         file.write('\n')
  885.         file.write('Bladex.SetCombos("Player1",%s)' % (Bladex.GetCombos('Player1'),))
  886.         file.write('\n')
  887.         file.write('# Scorer Data init\n')
  888.         file.write('#\n')
  889.         file.write('import Scorer\n')
  890.         file.write('Scorer.ActivateScorer()\n\n')
  891.         file.write('Scorer.SetVisible(1)\n\n')
  892.         file.write('__load_bar.Increment()\n')
  893.         file.write('import CharStats\n')
  894.         file.write('__load_bar.Increment()\n')
  895.         file.write('import GameText\n')
  896.         file.write('GameText.SetLanguage("%s")\n' % Language.Current)
  897.         file.write('import DefaultScorerData\n')
  898.         file.write('DefaultScorerData.Init()\n\n')
  899.         file.write('__load_bar.Increment()\n')
  900.         file.write('# Inicio del personaje y sus marcadores\n')
  901.         file.write('char=Bladex.GetEntity("Player1")\n')
  902.         file.write('Scorer.SetLevelLimits(0,CharStats.GetCharExperienceCost(char.CharType,char.Level))\n')
  903.         file.write('Scorer.SetLevelBarValue(char.PartialLevel)\n')
  904.         file.write('#Scorer.SetLevelValue(char.Level)\n')
  905.         file.write('#\n')
  906.         file.write('# Controls ( keyboard,mouse...) stuff\n')
  907.         file.write('#\n')
  908.         file.write('execfile("../../Scripts/InputInit.py")\n')
  909.         file.write('import acts\n')
  910.         file.write('acts.InitBindings("Player1")\n')
  911.         file.write('acts.SetNoConfigurableActions()\n')
  912.         file.write('__load_bar.Increment()\n')
  913.         file.write('try:\n')
  914.         file.write('  execfile("../../Config/Control.py")\n')
  915.         file.write('  print "BladeInit -> Executed Control.py"\n')
  916.         file.write('except:\n')
  917.         file.write('  execfile("../../Scripts/DefControl.py")\n')
  918.         file.write('  print "BladeInit -> Executed DefControl.py"\n\n')
  919.         file.write('__load_bar.Increment()\n')
  920.         file.write('#\n')
  921.         file.write('# Menu\n')
  922.         file.write('#\n')
  923.         file.write('#execfile("../../Scripts/Menu.py")\n')
  924.         file.write('import Menu\n')
  925.         file.write('Menu.InitMenuKeys()\n')
  926.         file.write('__load_bar.Increment()\n')
  927.         file.write('execfile("../../Scripts/Globals.py")\n')
  928.         import GotoMapVars
  929.         file.write('import GotoMapVars\n')
  930.         file.write('GotoMapVars.Get2DMapValuesAux(%s)\n' % (str(GotoMapVars.Set2DMapValuesAux()),))
  931.         import Reference
  932.         file.write('Reference.PYTHON_DEBUG=%d\n' % (Reference.PYTHON_DEBUG,))
  933.         file.write('if Reference.PYTHON_DEBUG >= 1:\n')
  934.         file.write('############### DEBUG LEVEL ONE ###############\n')
  935.         file.write('  execfile("..\\..\\Scripts\\DebugControl.py")\n')
  936.         file.write('if Reference.PYTHON_DEBUG >= 2:\n')
  937.         file.write('############### DEBUG LEVEL TWO ###############\n')
  938.         file.write('  Bladex.SetCallCheck(3)\n')
  939.         file.write('else:\n')
  940.         file.write('  Bladex.SetCallCheck(0)\n')
  941.         file.write('__load_bar.Increment("AnmCameras")\n')
  942.         file.write('import AnmCameras\n')
  943.         file.write('AnmCameras.Init()\n')
  944.         file.write('Bladex.ResumeSoundSystem()\n')
  945.         file.write('Bladex.DoneLoadGame()\n')
  946.         file.write('GameStateAux.CleanLoadTemp()\n\n\n')
  947.         file.write('try:\n')
  948.         file.write('  execfile("Positions.py")\n')
  949.         file.write('except IOError:\n')
  950.         file.write('  print "Can\xd5\xb4 find Positions.py"\n\n\n')
  951.         file.write('__load_bar.Clear()\n')
  952.         file.write('del __load_bar\n')
  953.         file.write('Bladex.SetTime(%f)\n' % (Bladex.GetTime(),))
  954.         file.write('#   Good Bye! (Enjoy The Silence)\n')
  955.         file.close()
  956.  
  957.     
  958.     def SaveCompVars(self, file, aux_dir):
  959.         globs = GetGlobals()
  960.         globs_dict = { }
  961.         global_vars = self.GetGlobalsAux(types.DictionaryType, globs)
  962.         for i in global_vars:
  963.             globs_dict[str(i[0])] = i[1]
  964.         
  965.         global_vars = self.GetGlobalsAux(types.ListType, globs)
  966.         for i in global_vars:
  967.             globs_dict[str(i[0])] = i[1]
  968.         
  969.         global_vars = self.GetGlobalsAux(types.TupleType, globs)
  970.         for i in global_vars:
  971.             globs_dict[str(i[0])] = i[1]
  972.         
  973.         filename = '%s/%s.dat' % (aux_dir, 'Globs')
  974.         globfile = open(filename, 'wt')
  975.         p = cPickle.Pickler(globfile)
  976.         p.dump(globs_dict)
  977.         globfile.close()
  978.         file.write("GameStateAux.LoadGlobalCompVars('%s',globals())\n" % (filename,))
  979.  
  980.     
  981.     def SaveVars(self, file):
  982.         '''Saves variables in the global scope.'''
  983.         globs = GetGlobals()
  984.         global_vars = self.GetGlobalsAux(types.IntType, globs)
  985.         file.write('\n# Integer variables\n')
  986.         for i in global_vars:
  987.             file.write('%s=%s\n' % (str(i[0]), str(i[1])))
  988.         
  989.         global_vars = self.GetGlobalsAux(types.FloatType, globs)
  990.         file.write('\n# Float variables\n')
  991.         for i in global_vars:
  992.             file.write('%s=%s\n' % (str(i[0]), str(i[1])))
  993.         
  994.         global_vars = self.GetGlobalsAux(types.StringType, globs)
  995.         file.write('\n# String variables\n')
  996.         for i in global_vars:
  997.             pass
  998.         
  999.  
  1000.     
  1001.     def SaveSounds(self, file):
  1002.         '''Saves sound objects in the global scope.'''
  1003.         gmadlig = Bladex.CreateSound('../../sounds/golpe_maderamed.wav', 'GolpeMaderaMediana')
  1004.         snd_vars = self.GetGlobalsAux(type(gmadlig))
  1005.         file.write('\n# Sound objects\n')
  1006.         snd_vars_names = []
  1007.         for i in snd_vars:
  1008.             snd_vars_names.append((str(i[0]), i[1].Name))
  1009.         
  1010.         for i in snd_vars_names:
  1011.             file.write('%s=Bladex.GetSound("%s")\n' % (i[0], i[1]))
  1012.         
  1013.  
  1014.     
  1015.     def SaveEntities(self, file):
  1016.         '''Saves entity objects in the global scope.'''
  1017.         ent = Bladex.GetEntity(0)
  1018.         ent_vars = self.GetGlobalsAux(type(ent))
  1019.         file.write('\n# Entity objects\n')
  1020.         ent_vars_names = []
  1021.         for i in ent_vars:
  1022.             
  1023.             try:
  1024.                 ent_vars_names.append((str(i[0]), i[1].Name))
  1025.             except AttributeError:
  1026.                 0
  1027.                 0
  1028.                 ent_vars
  1029.             except:
  1030.                 0
  1031.  
  1032.         
  1033.         for i in ent_vars_names:
  1034.             file.write('%s=Bladex.GetEntity("%s")\n' % (i[0], i[1]))
  1035.         
  1036.         file.write('\n\n')
  1037.  
  1038.     
  1039.     def SaveObjects(self, file, aux_dir):
  1040.         '''Saves objects (from Lib/Object.py) in the global scope.'''
  1041.         import Objects
  1042.         obj = Objects.DinObj()
  1043.         obj_vars = self.GetGlobalsAux(type(obj))
  1044.         file.write('\n# Object objects\n')
  1045.         obj_vars_names = []
  1046.         omit_objs = [
  1047.             '__main__.Flecha',
  1048.             'state',
  1049.             'InputManager']
  1050.         for i in obj_vars:
  1051.             print i
  1052.             if i is not self and str(i[1].__class__):
  1053.                 if str(i[0]) not in omit_objs:
  1054.                     obj_vars_names.append((str(i[0]), i[1]))
  1055.                 else:
  1056.                     print 'Omited', str(i[0])
  1057.             
  1058.         
  1059.         for i in obj_vars_names:
  1060.             
  1061.             try:
  1062.                 SavePickDataAux(file, aux_dir, i[1], i[0] + '=%s\n')
  1063.             except Exception:
  1064.                 0
  1065.                 exc = 0
  1066.                 obj_vars_names
  1067.                 print 'Failed saving of', i
  1068.                 print exc
  1069.             except:
  1070.                 0
  1071.  
  1072.         
  1073.         file.write('\n\n')
  1074.  
  1075.     
  1076.     def SaveSectors(self, file):
  1077.         '''Saves sector objects in the global scope.'''
  1078.         sec = Bladex.GetSector(0)
  1079.         sec_vars = self.GetGlobalsAux(type(sec))
  1080.         file.write('\n\n# Sector objects\n')
  1081.         sec_vars_names = []
  1082.         for i in sec_vars:
  1083.             sec_vars_names.append((str(i[0]), i[1].Index))
  1084.         
  1085.         for i in sec_vars_names:
  1086.             file.write('%s=Bladex.GetSector(%d)\n' % (i[0], i[1]))
  1087.         
  1088.         file.write('\n\n')
  1089.  
  1090.     
  1091.     def SaveModulesToBeSaved(self, file, aux_dir, ModulesToBeSaved):
  1092.         for i in ModulesToBeSaved:
  1093.             filename = '%s/%sData.dat' % (aux_dir, i.__name__)
  1094.             file.write('__load_bar.Increment("Module")\n')
  1095.             i.SaveData(filename)
  1096.             file.write('import %s\n' % (i.__name__,))
  1097.             file.write('%s.LoadData("%s")\n\n' % (i.__name__, filename))
  1098.         
  1099.  
  1100.     
  1101.     def SaveScheduledFuncs(self, file):
  1102.         exclude_funcs = ('PowWidgetDraw', 'PeriodicAutoSelectPlayer1', 'PlayerRestoreEnergy', 'RepeatPeriodicSound', 'NextText', 'ClearText', 'PeriodicSound::PlayPeriodic')
  1103.         n_sched_funcs = Bladex.GetnScheduledFuncs()
  1104.         print 'SaveScheduledFuncs(). There are ', n_sched_funcs, 'functions.'
  1105.         for i in range(n_sched_funcs):
  1106.             f = Bladex.GetScheduledFunc(i)
  1107.             if f[2] not in exclude_funcs:
  1108.                 func_string = 'GameStateAux.LoadFunctionAux(%s)' % (GameStateAux.SaveFunctionAux(f[0]),)
  1109.                 filename = GetPickFileName(f[1])
  1110.                 func_parms = 'GameStateAux.GetPickledData("%s")' % (filename,)
  1111.                 print 'SaveScheduledFuncs() ', filename, f[1], f[2]
  1112.                 GameStateAux.SavePickData(filename, f[1])
  1113.                 file.write("Bladex.AddScheduledFunc(%d,%s,%s,'%s')\n" % (f[3], func_string, func_parms, f[2]))
  1114.             
  1115.         
  1116.  
  1117.     
  1118.     def SaveAfterFrameFuncs(self, file):
  1119.         exclude_funcs = ('InterpinterpLevelBar', 'InterpinterpStrengthBar', 'InterpinterpEnergyBar', 'InterpShields', 'InterpFadeText', 'InterpWeapons', 'InterpObjects', 'DefaultSelectionData', 'Fade')
  1120.         n_afrm_funcs = Bladex.GetnAfterFrameFuncs()
  1121.         print 'SaveAfterFrameFuncs(). There are ', n_afrm_funcs, 'functions.'
  1122.         for i in range(n_afrm_funcs):
  1123.             f_name = Bladex.GetAfterFrameFuncName(i)
  1124.             if f_name not in exclude_funcs:
  1125.                 f = Bladex.GetAfterFrameFunc(f_name)
  1126.                 filename = GetPickFileName(f)
  1127.                 func_string = 'GameStateAux.GetPickledData("%s")' % (filename,)
  1128.                 GameStateAux.SavePickData(filename, f)
  1129.                 print 'SaveAfterFrameFuncs() ', filename, f, f_name, func_string
  1130.                 file.write("Bladex.SetAfterFrameFunc('%s',%s)\n" % (f_name, func_string))
  1131.             
  1132.         
  1133.  
  1134.     
  1135.     def SaveModules(self, file):
  1136.         '''Saves modules in the global scope.'''
  1137.         import string
  1138.         OmitModules = [
  1139.             '__builtins__',
  1140.             'Scorer',
  1141.             'Menu',
  1142.             'GameText',
  1143.             'GameState',
  1144.             'GameStateAux']
  1145.         global_mods = self.GetGlobalsAux(types.ModuleType)
  1146.         file.write('\n# Modules\n')
  1147.         for i in global_mods:
  1148.             pass
  1149.         
  1150.  
  1151.     
  1152.     def GetGlobalsAux(self, req_type, globs = None):
  1153.         g = None
  1154.         if globs:
  1155.             g = globs
  1156.         else:
  1157.             g = GetGlobals()
  1158.         elems = []
  1159.         for i in g.items():
  1160.             pass
  1161.         
  1162.         return elems
  1163.  
  1164.     
  1165.     def SaveAutoBODs(self, path):
  1166.         name = '%s/AutoBOD.dat' % (path,)
  1167.         BBLib.SaveAutoBODData(name)
  1168.  
  1169.     
  1170.     def SaveList(self, command, lista, file):
  1171.         nchunks = len(lista) / 5
  1172.         for i in range(nchunks):
  1173.             lolimit = 5 * i
  1174.             l = lista[lolimit:lolimit + 5]
  1175.             file.write(command % (str(l),))
  1176.         
  1177.  
  1178.     
  1179.     def __AuxGetResFiles(self, kind):
  1180.         RM = BBLib.GetResourceManager()
  1181.         nRes = RM.NResources(kind)
  1182.         ResFiles = []
  1183.         for i in range(nRes):
  1184.             res_file = RM.GetResourceFile(kind, i)
  1185.         
  1186.         return ResFiles
  1187.  
  1188.     
  1189.     def __AuxGetResFilesAndNames(self, kind):
  1190.         RM = BBLib.GetResourceManager()
  1191.         nRes = RM.NResources(kind)
  1192.         ResFiles = []
  1193.         for i in range(nRes):
  1194.             res_file = RM.GetResourceFile(kind, i)
  1195.             res_name = RM.GetResourceName(kind, i)
  1196.         
  1197.         return ResFiles
  1198.  
  1199.     
  1200.     def SaveTimers(self, file):
  1201.         file.write('\n# Timers\n')
  1202.         nTimers = Bladex.GetnTimers()
  1203.         for i in range(nTimers):
  1204.             cTimer = Bladex.GetTimerInfo(i)
  1205.             file.write('Bladex.CreateTimer("%s",%f)\n\n' % (cTimer[0], cTimer[1]))
  1206.         
  1207.         file.write('\n')
  1208.  
  1209.     
  1210.     def GetMMPFiles(self):
  1211.         return self._WorldState__AuxGetResFiles(BBLib.B_CID_BITMAP)
  1212.  
  1213.     
  1214.     def GetBODFiles(self):
  1215.         return self._WorldState__AuxGetResFiles(BBLib.B_CID_OBJDSCR)
  1216.  
  1217.     
  1218.     def GetBMPFiles(self):
  1219.         return self._WorldState__AuxGetResFilesAndNames(BBLib.B_CID_BMP)
  1220.  
  1221.     
  1222.     def GetAlphaBMPFiles(self):
  1223.         return self._WorldState__AuxGetResFilesAndNames(BBLib.B_CID_ALPHABMP)
  1224.  
  1225.  
  1226.  
  1227. def GetGlobals():
  1228.     import sys
  1229.     
  1230.     try:
  1231.         1 + ''
  1232.     except:
  1233.         frame = sys.exc_info()[2].tb_frame.f_back
  1234.  
  1235.     while frame:
  1236.         globs = frame.f_globals
  1237.         frame = frame.f_back
  1238.     return globs
  1239.  
  1240.